﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Linq;
using System.Windows.Forms;
using CajaChica.Clases;
using CajaChica.Entidades;

namespace CajaChica.Formularios
{
    public partial class frmOperacionesLiquidacion : CajaChica.Formularios.frmMaestro
    {
        clsLiquidacionCabecera objCabecera;
        clsLiquidacionDetalle objDetalle;
        clsPersona objPersona;
        clsDocumentos objDocumento;
        public frmOperacionesLiquidacion()
        {
            InitializeComponent();
        }

        private void frmLiquidaciones_Load(object sender, EventArgs e)
        {
            objCabecera = new clsLiquidacionCabecera();
            objPersona = new clsPersona();
            objDocumento = new clsDocumentos();
            sbMantenimiento.ExpandedPanel = sbpVer;
            stcMaestro.SelectedTab = stiListado;
            this.dataGridViewX1.AutoGenerateColumns = false;
            dataGridViewX1.DataSource = objCabecera.CargarDatosGridView();
            this.AsignarPropiedadesGrid();
            cboResponsable.DataSource = objPersona.CargarDatosEmpleadosComboBox();
            cboResponsable.DisplayMember = "RAZON_SOCIAL";
            cboResponsable.ValueMember = "CODIGO";
            cboProveedor.DataSource = objPersona.CargarDatosComboBox();
            cboProveedor.DisplayMember = "RAZON_SOCIAL";
            cboProveedor.ValueMember = "CODIGO";
            cboDocumento.DataSource = objDocumento.CargarDatosComboBox();
            cboDocumento.DisplayMember = "DOCUMENTO";
            cboDocumento.ValueMember = "CODIGO";
            txtDescripcionDocumento.CharacterCasing = CharacterCasing.Upper;
            txtMotivo.CharacterCasing = CharacterCasing.Upper;
            this.SelectMaxId();
        }

        public void Limpiar()
        {
            txtAdelanto.Text = "0";
            txtDescripcionDocumento.Text = "";
            txtImporte.Text = "";
            txtMotivo.Text = "";
            txtReembolso.Text = "";
            txtReintegro.Text = "";
            txtSerieNumero.Text = "";
            txtTotal.Text = "";
            cboDocumento.SelectedIndex = -1;
            cboMoneda.SelectedIndex = -1;
            cboProveedor.SelectedIndex = -1;
            cboResponsable.SelectedIndex = -1;
            grdDetalle.Rows.Clear();
        }

        public void AsignarPropiedadesGrid()
        {
            dataGridViewX1.AutoGenerateColumns = false;
            dataGridViewX1.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
            dataGridViewX1.Columns[5].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
            //grdDetalle.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
            dataGridViewX1.Columns[0].DataPropertyName = "CODIGO";
            dataGridViewX1.Columns[1].DataPropertyName = "RESPONSABLE";
            dataGridViewX1.Columns[2].DataPropertyName = "MOTIVO";
            dataGridViewX1.Columns[3].DataPropertyName = "FECHA_SOLICITUD";
            dataGridViewX1.Columns[4].DataPropertyName = "FECHA_LIQUIDACION";
            dataGridViewX1.Columns[5].DataPropertyName = "TOTAL";
            dataGridViewX1.Columns[6].DataPropertyName = "PERIODO";            
        }

        private void btnNuevoGuardar_Click(object sender, EventArgs e)
        {
            objCabecera = new clsLiquidacionCabecera();
            objDetalle = new clsLiquidacionDetalle();
            clsArchivoConfiguracion conf = new clsArchivoConfiguracion();

            try
            {
                objCabecera.Guardar(
                    int.Parse(cboResponsable.SelectedValue.ToString()),
                    txtMotivo.Text.Trim(),
                    DateTime.Parse(dtFechaSolicitud.Text),
                    DateTime.Parse(dtFechaLiquidacion.Text),
                    decimal.Parse(txtTotal.Text),
                    decimal.Parse(txtReintegro.Text),
                    decimal.Parse(txtReembolso.Text),
                    conf.LeerMesTrabajo(),
                    int.Parse(conf.LeerCodigoUsuario().ToString()));

                foreach (DataGridViewRow row in grdDetalle.Rows)
                {
                    string moneda = row.Cells[7].Value.ToString();
                    
                    objDetalle.Guardar(
                        row.Cells[2].Value.ToString(), //TIPO DE DOCUMENTO
                        DateTime.Parse(row.Cells[4].Value.ToString()), //FECHA DE EMISION DEL DOCUMENTO
                        row.Cells[5].Value.ToString(), //NUMERO DEL DOCUMENTO
                        int.Parse(row.Cells[0].Value.ToString()), //PROVEEDOR
                        row.Cells[6].Value.ToString(), //DESCRIPCION
                        moneda.Substring(0,1), //MONEDA S = SOLES, D = DOLARES
                        decimal.Parse(row.Cells[8].Value.ToString()), //IMPORTE
                        int.Parse(lblIdCabecera.Text), //LIQUIDACION CABECERA
                        int.Parse(conf.LeerCodigoUsuario().ToString())); //USUARIO
                }

                MessageBox.Show("SE REGISTRO LA LIQUIDACION",
                    "SISTEMA DE CAJA CHICA", MessageBoxButtons.OK, MessageBoxIcon.Information);
                this.Limpiar();
                this.SelectMaxId();
            }
            catch (Exception ex)
            {
                MessageBox.Show("SE PRODUJO UN ERROR AL REGISTRAR LA LIQUIDACION",
                    "SISTEMA DE CAJA CHICA", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        public void SelectMaxId()
        {
            cajaEntities objCajaEntidades = new cajaEntities();
            var maximo_serie = (from lc in objCajaEntidades.liquidacion_cabecera
                                select lc.id).Max();
            lblIdCabecera.Text = (maximo_serie + 1).ToString();
        }

        private void btnAgregarDetalle_Click(object sender, EventArgs e)
        {
            grdDetalle.Rows.Add(
                cboProveedor.SelectedValue.ToString(),
                cboProveedor.Text,
                cboDocumento.SelectedValue.ToString(),
                cboDocumento.Text,
                dtFechaDocumento.Text,
                txtSerieNumero.Text,
                txtDescripcionDocumento.Text,
                cboMoneda.Text,
                txtImporte.Text);
            
            decimal sumatoria = 0;

            foreach (DataGridViewRow row in grdDetalle.Rows)
            {
                sumatoria += Convert.ToDecimal(row.Cells[8].Value);    //aqui recorre las celdas y las va sumando
            }
            txtTotal.Text = sumatoria.ToString();
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            int Todo = grdDetalle.RowCount; //cuenta todas las filas del dgDatos
            if (Todo >= 2) //las filas del dgDatos tienen que ser mayor o igual a 2 para poder remover
            {
                int Fil = grdDetalle.CurrentRow.Index;
                grdDetalle.Rows.RemoveAt(Fil);
            }
            else //en caso contrario no remueve la fila
            {
                MessageBox.Show("NO EXISTE NINGUN REGISTRO PARA ELIMINAR!",
                "SISTEMA DE CAJA CHICA", MessageBoxButtons.OK,
                MessageBoxIcon.Warning);
            }

            decimal sumatoria = 0;

            foreach (DataGridViewRow row in grdDetalle.Rows)
            {
                sumatoria += Convert.ToDecimal(row.Cells[8].Value);    //aqui recorre las celdas y las va sumando
            }
            txtTotal.Text = sumatoria.ToString(); //aqui se graba el total
        }

        private void btnNuevoLimpiar_Click(object sender, EventArgs e)
        {
            this.Limpiar();
        }

        private void btnNuevoCancelar_Click(object sender, EventArgs e)
        {
            this.Limpiar();
            sbMantenimiento.ExpandedPanel = sbpVer;
            stcMaestro.SelectedTab = stiListado;
        }

        private void sbpNuevo_Click(object sender, EventArgs e)
        {
            this.stcMaestro.SelectedTab = stiRegistro;
            cboResponsable.Select();
        }

        private void txtAdelanto_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == 13)
            {
                if (decimal.Parse(txtAdelanto.Text) > decimal.Parse(txtTotal.Text))
                {
                    txtReintegro.Text = (decimal.Parse(txtAdelanto.Text) - decimal.Parse(txtTotal.Text)).ToString();
                    txtReembolso.Text = "0";
                }
                else
                {
                    txtReembolso.Text = (decimal.Parse(txtAdelanto.Text) - decimal.Parse(txtTotal.Text)).ToString();
                    txtReintegro.Text = "0";
                }
            }
        }

        private void textBoxX1_TextChanged(object sender, EventArgs e)
        {
            objCabecera = new clsLiquidacionCabecera();
            if (string.Empty != textBoxX1.Text.Trim())
            {
                dataGridViewX1.DataSource = objCabecera.Buscar(textBoxX1.Text.Trim());
            }
            else
            {
                dataGridViewX1.DataSource = objCabecera.CargarDatosGridView();
            }
        }
    }
}
